// register.js - 注册页面逻辑
import { post } from '../../utils/request';

Page({
  data: {
    phone: '',              // 手机号
    code: '',               // 验证码
    password: '',           // 密码
    confirmPassword: '',    // 确认密码
    showPassword: false,    // 是否显示密码
    showConfirmPassword: false, // 是否显示确认密码
    agreedToTerms: false,   // 是否同意用户协议
    countdown: 0,           // 倒计时
    canGetCode: false,      // 是否可以获取验证码
    canRegister: false      // 是否可以注册
  },

  // 手机号输入
  onPhoneInput(e) {
    const phone = e.detail.value;
    this.setData({
      phone
    });
    
    // 检查是否可以获取验证码
    this.checkCanGetCode();
    // 检查是否可以注册
    this.checkCanRegister();
  },

  // 验证码输入
  onCodeInput(e) {
    const code = e.detail.value;
    this.setData({
      code
    });
    
    // 检查是否可以注册
    this.checkCanRegister();
  },

  // 密码输入
  onPasswordInput(e) {
    const password = e.detail.value;
    this.setData({
      password
    });
    
    // 检查是否可以注册
    this.checkCanRegister();
  },

  // 确认密码输入
  onConfirmPasswordInput(e) {
    const confirmPassword = e.detail.value;
    this.setData({
      confirmPassword
    });
    
    // 检查是否可以注册
    this.checkCanRegister();
  },

  // 切换密码可见性
  togglePasswordVisibility() {
    this.setData({
      showPassword: !this.data.showPassword
    });
  },

  // 切换确认密码可见性
  toggleConfirmPasswordVisibility() {
    this.setData({
      showConfirmPassword: !this.data.showConfirmPassword
    });
  },

  // 切换协议同意状态
  toggleAgreement() {
    this.setData({
      agreedToTerms: !this.data.agreedToTerms
    });
    
    // 检查是否可以注册
    this.checkCanRegister();
  },

  // 检查是否可以获取验证码
  checkCanGetCode() {
    const { phone } = this.data;
    this.setData({
      canGetCode: this.validatePhone(phone) && this.data.countdown === 0
    });
  },

  // 检查是否可以注册
  checkCanRegister() {
    const { phone, code, password, confirmPassword, agreedToTerms } = this.data;
    const canRegister = 
      this.validatePhone(phone) && 
      code.length === 6 && 
      password.length >= 6 && 
      password.length <= 20 && 
      password === confirmPassword && 
      agreedToTerms;
    
    this.setData({
      canRegister
    });
  },

  // 获取验证码
  getVerificationCode() {
    const { phone } = this.data;
    
    // 验证手机号
    if (!this.validatePhone(phone)) {
      wx.showToast({
        title: '请输入正确的手机号码',
        icon: 'none'
      });
      return;
    }
    
    // 发送验证码请求
    wx.showLoading({
      title: '发送中',
    });
    
    post('/api/auth/send-code', {
      phone
    })
    .then(res => {
      wx.hideLoading();
      
      if (res.code === 0) {
        // 发送成功，开始倒计时
        this.startCountdown();
        wx.showToast({
          title: '验证码已发送',
          icon: 'success'
        });
      } else {
        // 发送失败
        wx.showToast({
          title: res.message || '发送失败',
          icon: 'none'
        });
      }
    })
    .catch(err => {
      wx.hideLoading();
      console.error('发送验证码请求失败:', err);
      wx.showToast({
        title: '网络异常，请稍后重试',
        icon: 'none'
      });
    });
  },

  // 开始倒计时
  startCountdown() {
    let countdown = 60;
    this.setData({
      countdown,
      canGetCode: false
    });
    
    const timer = setInterval(() => {
      countdown--;
      this.setData({
        countdown
      });
      
      if (countdown <= 0) {
        clearInterval(timer);
        this.checkCanGetCode();
      }
    }, 1000);
  },

  // 注册
  onRegister() {
    const { phone, code, password } = this.data;
    
    // 再次验证
    if (!this.validatePhone(phone)) {
      wx.showToast({
        title: '请输入正确的手机号码',
        icon: 'none'
      });
      return;
    }
    
    if (code.length !== 6) {
      wx.showToast({
        title: '请输入6位验证码',
        icon: 'none'
      });
      return;
    }
    
    if (password.length < 6 || password.length > 20) {
      wx.showToast({
        title: '密码长度应为6-20位',
        icon: 'none'
      });
      return;
    }
    
    if (password !== this.data.confirmPassword) {
      wx.showToast({
        title: '两次输入的密码不一致',
        icon: 'none'
      });
      return;
    }
    
    if (!this.data.agreedToTerms) {
      wx.showToast({
        title: '请阅读并同意用户协议',
        icon: 'none'
      });
      return;
    }
    
    // 发送注册请求
    wx.showLoading({
      title: '注册中',
    });
    
    post('/api/auth/register', {
      phone,
      code,
      password
    })
    .then(res => {
      wx.hideLoading();
      
      if (res.code === 0) {
        // 注册成功，显示成功提示并跳转到登录页
        wx.showToast({
          title: '注册成功',
          icon: 'success'
        });
        
        // 延迟跳转到登录页
        setTimeout(() => {
          wx.navigateTo({
            url: '/pages/user/login'
          });
        }, 1500);
      } else {
        // 注册失败
        wx.showToast({
          title: res.message || '注册失败',
          icon: 'none'
        });
      }
    })
    .catch(err => {
      wx.hideLoading();
      console.error('注册请求失败:', err);
      wx.showToast({
        title: '网络异常，请稍后重试',
        icon: 'none'
      });
    });
  },

  // 查看用户协议
  viewUserAgreement() {
    wx.navigateTo({
      url: '/pages/user/agreement?type=user'
    });
  },

  // 查看隐私政策
  viewPrivacyPolicy() {
    wx.navigateTo({
      url: '/pages/user/agreement?type=privacy'
    });
  },

  // 跳转到登录页
  goLogin() {
    wx.navigateTo({
      url: '/pages/user/login'
    });
  },

  // 验证手机号格式
  validatePhone(phone) {
    const phoneRegex = /^1[3-9]\d{9}$/;
    return phoneRegex.test(phone);
  }
});